R包ade4的多重对应分析(MCA)
library(ade4)
#查看 R 文档,本篇就按照文档中下方示例过程来
?dudi.acm
帮助文档中提到了4各命令,可以相互配合使用。
dudi.acm(),用于执行因子表的多重对应分析;
acm.burt(),可用于给出两个因子表的crossed Burt表;
acm.disjonctif(),可用于提供一个因子表的完整析取表;
boxplot(),可作为解释轴的图形工具使用。
R文档中间部分的参数信息,可自行浏览。
查看最下方的示例,简介分析方法。使用ade4自带的数据集“banque”进行演示。
#MCA 分析data(banque)
banque.acm <- dudi.acm(banque, scann = FALSE, nf = 3)
加载数据集banque,并使用dudi.acm()执行MCA。dudi.acm()中nf = 3,在排序结果中显示3个排序轴的坐标(实际计算还是将得到全部的排序轴,该参数仅为在全部结果中提取前n轴的坐标作为展示而已),若想展示更多的排序轴(如第四轴等),可更改此参数,此处示例只展示前3个轴。
dudi.acm()返回一个类列表,记录了排序空间维度、排序坐标(对象,li;变量因子,co)、特征值(Eigenvalues)、解释量(Projected inertia)、累计解释量(Cumulative projected inertia)等信息。
#概要banque.acm
summary(banque.acm)
banque.acm$eig[1:4]
#查看排序轴解释量(%,显示前 4 轴)
round(banque.acm$eig / sum(banque.acm$eig) * 100, 2)[1:4]
#所有特征值柱形图
scatterutil.eigen(banque.acm$eig, box = TRUE, sub = NA)
#对象和变量坐标
#因为上述 dudi.acm() 中,参数 nf = 3,故默认显示了前三个排序轴
head(banque.acm$li)
head(banque.acm$co)
可通过scatter()函数查看排序结果,并根据因子类型和数量,分别展示出各变量在排序图中的所对应位置。结果中每个点代表一个对象,各子图分别基于不同的因子类型(即原数据框中各因子列)分别展示变量的平均影响范围。
#查看排序图中,各因子变量的分布scatter(banque.acm)
boxplot(banque.acm)
s.value()函数,能够在排序图中按对象分布标记对象。颜色划分依据,根据对象在各排序轴中的位置,分布在0点左侧的展示为白色,右侧的展示为黑色。同时根据对象分布离0点距离,以不同大小的形状展示对象,距离越远形状越大。图注即展示了在各轴特定坐标数值下所对应的点形状大小。
#s.value()能够以 0 刻度分为分界线,在各排序轴中标记对象,对象分布特征有助于探索数据par(mfrow = c(2, 2))
s.value(banque.acm$li, banque.acm$li[,1]) #以第一轴区分
s.value(banque.acm$li, banque.acm$li[,2]) #以第二轴区分
s.value(banque.acm$li, banque.acm$li[,3]) #以第三轴区分,但二维排序图仍然默认展示前两轴
#因为上述 dudi.acm() 中,参数 nf = 3,即默认显示了前三个排序轴
#故以第四轴区分时,将会报错
#s.value(banque.acm$li, banque.acm$li[,4])
#可通过修改排序时的 nf 参数解决
acm.burt()函数可用于获取因子间Burt表。对测试数据集“banque”,计算因子间Burt表后,执行对应分析(CA),并观测CA与上述banque的MCA结果的一致性。
#acm.burt()示例,mca and coa of Burt tablebb <- acm.burt(banque, banque) #若有需要可使用 write.table() 输出
bbcoa <- dudi.coa(bb, scann = FALSE) #CA 排序
plot(banque.acm$c1[,1], bbcoa$c1[,1])
acm.disjonctif()函数同样可用于获取因子间Burt表。对测试数据集“banque”中的因子进行析取,执行对应分析(CA),并观测CA与上述banque的MCA结果的一致性。
#acm.disjonctif()示例,mca and coa of disjonctive tablebd <- acm.disjonctif(banque) #若有需要可使用 write.table() 输出
bdcoa <- dudi.coa(bd, scann = FALSE) #CA 排序
par(mfrow = c(1, 2))
plot(banque.acm$li[,1], bdcoa$li[,1], main = '对象')
plot(banque.acm$co[,1], bdcoa$co[,1], main = '变量')
对应分析(CA)和去趋势对应分析(DCA)在群落分析中的应用